package com.yc.cinema.aop;

import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

// CGLIB 的动态代理时基于继承实现
// CGLIB 的代理对象是被代理对象的子类
// 使用 动态字节码 技术
public class CGLIBProxy {

    public static Object proxy(Object obj){
        Enhancer enhancer = new Enhancer();
        // 设置父类
        enhancer.setSuperclass(obj.getClass());
        // 设置回调 =》 方法拦截器
        enhancer.setCallback(new MethodInterceptor() {
            @Override
            public Object intercept(Object o, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
                System.out.print("使用手机");
                // 执行业务方法
                return methodProxy.invoke(obj, args);
            }
        });
        // 创建代理对象
        return enhancer.create();
    }
}
